home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
news
/
inn1.000
/
inn1.4sec-linux-src.tar
/
inn
/
samples
/
sendbatch
< prev
next >
Wrap
Text File
|
1993-01-29
|
5KB
|
211 lines
#! /bin/sh
## $Revision: 1.10 $
## SH script to send UUCP batches out. By Mike Cooper and Rich $alz.
## Based on B News sendbatch 1.22 10/29/89.
## =()<. @<_PATH_SHELLVARS>@>()=
. /news/lib/innshellvars
## Place to run a df, and amount of space needed.
UUSPOOL=/usr/spool/uucp
SPOOLFREE=20000
## Program names and flags. Most can be set on the command-line.
C7=
COMP=
COMPFLAGS=
COMPRESS=/usr/ucb/compress
ECHO=
## Not a config param since this is the remote rnews.
RNEWS=rnews
UUX=uux
UUXFLAGS="- -r -n -gd"
## Desired size of each batch, total number of bytes we want to queue.
DEFBYTES=50000
BYTESQUEUED=1000000000
PROG=`basename $0`
LOCK=${LOCKS}/LOCK.${PROGNAME}
## Go to where the action is.
cd ${BATCH}
## Loop over command line.
for SITE
do
## Is this a flag?
case "${SITE}" in
-s*)
DEFBYTES=`expr "${SITE}" : '-s\(.*\)'`
continue
;;
-m*)
BYTESQUEUED=`expr "${SITE}" : '-m\(.*\)'`
continue
;;
+m)
BYTESQUEUED=''
continue
;;
-p*)
BYTESPERRUN=`expr "${SITE}" : '-p\(.*\)'`
continue
;;
+p)
BYTESPERRUN=''
continue
;;
-r*)
RNEWS=`expr "${SITE}" : '-r\(.*\)'`
continue
;;
-U*)
UUX=`expr "${SITE}" : '-U\(.*\)'`
continue
;;
-u*)
UUXFLAGS=`expr "${SITE}" : '-u\(.*\)'`
continue
;;
-c7)
COMP="; exec ${COMPRESS} ${COMPFLAGS} | $LIB/encode"
ECHO="echo '#! c7unbatch'"
continue
;;
-c)
COMP="; exec ${COMPRESS} ${COMPFLAGS}"
ECHO="echo '#! cunbatch'"
continue
;;
+c)
COMP=''
C7=''
ECHO=''
COMPFLAGS=''
continue
;;
-[bBC]*)
COMPFLAGS="${COMPFLAGS} ${SITE}"
continue
;;
-o*)
ECHO=`expr "${SITE}" : '-o\(.*\)'`
RNEWS='cunbatch'
continue
;;
+o)
ECHO=''
RNEWS=rnews
continue
;;
-D*)
UUSPOOL=`expr "${SITE}" : '-D\(.*\)'`
continue
;;
+D)
UUSPOOL=''
continue
;;
-f*)
SPOOLFREE=`expr "${SITE}" : '-f\(.*\)'`
continue
;;
esac
test -z "${BYTESPERRUN}" && BYTESPERRUN=${BYTESQUEUED}
## We have a site; lock it.
LOCK=${LOCKS}/LOCK.${SITE}
trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
shlock -p $$ -f ${LOCK} || {
echo "${PROG}: ${SITE} Locked by `cat ${LOCK}`."
continue
}
## Flush the batchfile.
BATCHFILE=${BATCH}/${SITE}.uucp
if [ -f ${SITE}.work ] ; then
cat ${SITE}.work >>${BATCHFILE}
rm -f ${SITE}.work
fi
mv ${SITE} ${SITE}.work
ctlinnd -s -t30 flush ${SITE} || {
echo "${PROG}: Can't flush ${SITE}."
rm -f ${LOCK}
continue
}
cat ${SITE}.work >>${BATCHFILE}
rm -f ${SITE}.work
if [ ! -s ${BATCHFILE} ] ; then
echo "${PROG}: No articles for ${SITE}."
rm -f ${LOCK}
continue
fi
## Check free space on the partition?
if [ -n "${UUSPOOL}" ] ; then
FREE=`(cd ${UUSPOOL}; df . | ${AWK} '
$6 == "'${UUSPOOL}'" { print $4 ; exit }
$1 == "'${UUSPOOL}'" && NF == 7 { print $4 ; exit }
$2 == "'${UUSPOOL}'" { print $5 ; exit }
$1 == "'${UUSPOOL}'" { print $3 ; exit }
')`
if [ -n "${FREE}" -a "${FREE}" -lt ${SPOOLFREE} ] ; then
echo "${PROG}: No space on ${UUSPOOL} for ${SITE} (${FREE})."
rm -f ${LOCK}
continue
fi
fi
## Check the host's queue size?
QUEUE=0
if [ -n "${BYTESQUEUED}" ] ; then
if [ -d /usr/spool/uucp/${SITE} ] ; then
# Get queue size from directory size
QUEUE=`du -s "/usr/spool/uucp/${SITE}" \
| ${AWK} '{ printf("%s000\n", $1); }'`
else
## Get queue size from uuq command.
QUEUE=`uuq -l -s${SITE} | ${AWK} '{print $4; exit }'`
fi
test -z "${QUEUE}" && QUEUE=0
if [ "${QUEUE}" -gt ${BYTESQUEUED} ] ; then
echo "${PROG}: ${SITE} has ${QUEUE} bytes queued."
rm -f ${LOCK}
continue
fi
fi
## Set how many bytes we can queue this time.
if [ -z "${BYTESQUEUED}" ] ; then
BATCHBYTES=${BYTESPERRUN}
else
BATCHBYTES=`expr ${BYTESQUEUED} - "${QUEUE}"`
test ${BATCHBYTES} -gt ${BYTESPERRUN} && BATCHBYTES=${BYTESPERRUN}
fi
# Say how big each batch should be. Assume 50% compression.
if [ -n "${COMP}" ] ; then
MAXBYTES=`expr ${DEFBYTES} \* 2`
else
MAXBYTES=${DEFBYTES}
fi
## Assemble uux command to have batcher(1) run.
if [ -f ${SITE}.cmd ] ; then
UUXCOM="`cat ${SITE}.cmd`"
elif [ -n "${ECHO}" -o -n "${COMP}" ]; then
UUXCOM="( ${ECHO} ${COMP} ) | ${UUX} - ${UUXFLAGS} ${SITE}!${RNEWS}"
else
UUXCOM="${UUX} - ${UUXFLAGS} ${SITE}!${RNEWS}"
fi
## Create batches.
if [ ${BATCHBYTES} -gt 0 ] ; then
${NEWSBIN}/batcher -B ${BATCHBYTES} -b ${MAXBYTES} -p "${UUXCOM}" \
${SITE} ${BATCHFILE}
fi
rm -f ${LOCK}
done